package com.hornet.manager.system.model;

import java.util.Date;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.apache.shiro.crypto.SecureRandomNumberGenerator;

import tk.mybatis.mapper.annotation.NameStyle;
import tk.mybatis.mapper.code.Style;

import com.alibaba.fastjson.annotation.JSONField;
import com.hornet.commons.utils.PropertyUtils;

@Table(name = "hornet_system_user")
@NameStyle(Style.normal)
public class User {
    /**
     * 用户主键
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 用户账号
     */
    private String account;

    /**
     * 用户密码
     */
    private String password;

    /**
     * 密码秘钥
     */
    private String salt;

    /**
     * 真实姓名
     */
    private String truename;

    /**
     * 姓名拼音
     */
    private String spell;

    /**
     * 性别
     */
    private String gender;

    /**
     * 出生日期
     */
    @JSONField(format="yyyy-MM-dd")
    private Date birthday;

    /**
     * 手机
     */
    private String mobile;

    /**
     * 电话
     */
    private String telephone;

    /**
     * 电子邮件
     */
    private String email;

    /**
     * 登录次数
     */
    private Integer loginCount;

    /**
     * 第一次访问时间
     */
    private Date firstVisit;

    /**
     * 上一次访问时间
     */
    private Date previousVisit;

    /**
     * 最后访问时间
     */
    private Date lastVisit;

    /**
     * 备注
     */
    private String remark;

    /**
     * 是否锁定：-1 锁定、 1 正常
     */
    private Integer locked;

    /**
     * 密码找回的数字签名
     */
    private String iforgot_signature;

    /**
     * 密码找回，有效期时间（存储的是日期时间）
     */
    private Date iforgot_expires;

    /**
     * 最后修改密码日期
     */
    private Date change_pass_date;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 创建用户主键
     */
    private Long createUserId;

    /**
     * 创建用户
     */
    private String createUserName;

    /**
     * 修改时间
     */
    private Date modifyTime;

    /**
     * 修改用户主键
     */
    private Long modifyUserId;

    /**
     * 修改用户
     */
    private String modifyUserName;

    /**
     * QQ登录接入OPENID
     */
    private String qq_openid;

    /**
     * 微信登录接入OPENID
     */
    private String weixin_openid;

    /**
     * 微博登录接入OPENID
     */
    private String weibo_openid;
    
    
    @Transient
    private String quickSearch ;
    /**
     * 项目加密盐
     */
    private static String AppSalt = PropertyUtils.getValue("shiro.applicationSalt");
    
    /**
     * 随机加密盐
     */
    public void setRandomSalt() {
    	setSalt(new SecureRandomNumberGenerator().nextBytes().toHex());
    }
    
    /**
     * 组合加密盐
     * 项目加密盐+用户名+随机岁加密盐
     * @return
     */
    public String getCredentialsSalt() {
    	if(null != getSalt()) {
    		return AppSalt + getSalt() ;
    	} 
    	return null;
    }
    

    public String getQuickSearch() {
		return quickSearch;
	}

	public void setQuickSearch(String quickSearch) {
		this.quickSearch = quickSearch;
	}

	/**
     * 获取用户主键
     *
     * @return id - 用户主键
     */
    public Long getId() {
        return id;
    }

    /**
     * 设置用户主键
     *
     * @param id 用户主键
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * 获取用户账号
     *
     * @return account - 用户账号
     */
    public String getAccount() {
        return account;
    }

    /**
     * 设置用户账号
     *
     * @param account 用户账号
     */
    public void setAccount(String account) {
        this.account = account;
    }

    /**
     * 获取用户密码
     *
     * @return password - 用户密码
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置用户密码
     *
     * @param password 用户密码
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * 获取密码秘钥
     *
     * @return salt - 密码秘钥
     */
    public String getSalt() {
        return salt;
    }

    /**
     * 设置密码秘钥
     *
     * @param salt 密码秘钥
     */
    public void setSalt(String salt) {
        this.salt = salt;
    }

    /**
     * 获取真实姓名
     *
     * @return truename - 真实姓名
     */
    public String getTruename() {
        return truename;
    }

    /**
     * 设置真实姓名
     *
     * @param truename 真实姓名
     */
    public void setTruename(String truename) {
        this.truename = truename;
    }

    /**
     * 获取姓名拼音
     *
     * @return spell - 姓名拼音
     */
    public String getSpell() {
        return spell;
    }

    /**
     * 设置姓名拼音
     *
     * @param spell 姓名拼音
     */
    public void setSpell(String spell) {
        this.spell = spell;
    }

    /**
     * 获取性别
     *
     * @return gender - 性别
     */
    public String getGender() {
        return gender;
    }

    /**
     * 设置性别
     *
     * @param gender 性别
     */
    public void setGender(String gender) {
        this.gender = gender;
    }

    /**
     * 获取出生日期
     *
     * @return birthday - 出生日期
     */
    public Date getBirthday() {
        return birthday;
    }

    /**
     * 设置出生日期
     *
     * @param birthday 出生日期
     */
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    /**
     * 获取手机
     *
     * @return mobile - 手机
     */
    public String getMobile() {
        return mobile;
    }

    /**
     * 设置手机
     *
     * @param mobile 手机
     */
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    /**
     * 获取电话
     *
     * @return telephone - 电话
     */
    public String getTelephone() {
        return telephone;
    }

    /**
     * 设置电话
     *
     * @param telephone 电话
     */
    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    /**
     * 获取电子邮件
     *
     * @return email - 电子邮件
     */
    public String getEmail() {
        return email;
    }

    /**
     * 设置电子邮件
     *
     * @param email 电子邮件
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * 获取登录次数
     *
     * @return loginCount - 登录次数
     */
    public Integer getLoginCount() {
        return loginCount;
    }

    /**
     * 设置登录次数
     *
     * @param loginCount 登录次数
     */
    public void setLoginCount(Integer loginCount) {
        this.loginCount = loginCount;
    }

    /**
     * 获取第一次访问时间
     *
     * @return firstVisit - 第一次访问时间
     */
    public Date getFirstVisit() {
        return firstVisit;
    }

    /**
     * 设置第一次访问时间
     *
     * @param firstVisit 第一次访问时间
     */
    public void setFirstVisit(Date firstVisit) {
        this.firstVisit = firstVisit;
    }

    /**
     * 获取上一次访问时间
     *
     * @return previousVisit - 上一次访问时间
     */
    public Date getPreviousVisit() {
        return previousVisit;
    }

    /**
     * 设置上一次访问时间
     *
     * @param previousVisit 上一次访问时间
     */
    public void setPreviousVisit(Date previousVisit) {
        this.previousVisit = previousVisit;
    }

    /**
     * 获取最后访问时间
     *
     * @return lastVisit - 最后访问时间
     */
    public Date getLastVisit() {
        return lastVisit;
    }

    /**
     * 设置最后访问时间
     *
     * @param lastVisit 最后访问时间
     */
    public void setLastVisit(Date lastVisit) {
        this.lastVisit = lastVisit;
    }

    /**
     * 获取备注
     *
     * @return remark - 备注
     */
    public String getRemark() {
        return remark;
    }

    /**
     * 设置备注
     *
     * @param remark 备注
     */
    public void setRemark(String remark) {
        this.remark = remark;
    }

    /**
     * 获取是否锁定：-1 锁定、 1 正常
     *
     * @return locked - 是否锁定：-1 锁定、 1 正常
     */
    public Integer getLocked() {
        return locked;
    }

    /**
     * 设置是否锁定：-1 锁定、 1 正常
     *
     * @param locked 是否锁定：-1 锁定、 1 正常
     */
    public void setLocked(Integer locked) {
        this.locked = locked;
    }

    /**
     * 获取密码找回的数字签名
     *
     * @return iforgot_signature - 密码找回的数字签名
     */
    public String getIforgot_signature() {
        return iforgot_signature;
    }

    /**
     * 设置密码找回的数字签名
     *
     * @param iforgot_signature 密码找回的数字签名
     */
    public void setIforgot_signature(String iforgot_signature) {
        this.iforgot_signature = iforgot_signature;
    }

    /**
     * 获取密码找回，有效期时间（存储的是日期时间）
     *
     * @return iforgot_expires - 密码找回，有效期时间（存储的是日期时间）
     */
    public Date getIforgot_expires() {
        return iforgot_expires;
    }

    /**
     * 设置密码找回，有效期时间（存储的是日期时间）
     *
     * @param iforgot_expires 密码找回，有效期时间（存储的是日期时间）
     */
    public void setIforgot_expires(Date iforgot_expires) {
        this.iforgot_expires = iforgot_expires;
    }

    /**
     * 获取最后修改密码日期
     *
     * @return change_pass_date - 最后修改密码日期
     */
    public Date getChange_pass_date() {
        return change_pass_date;
    }

    /**
     * 设置最后修改密码日期
     *
     * @param change_pass_date 最后修改密码日期
     */
    public void setChange_pass_date(Date change_pass_date) {
        this.change_pass_date = change_pass_date;
    }

    /**
     * 获取创建时间
     *
     * @return createTime - 创建时间
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置创建时间
     *
     * @param createTime 创建时间
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取创建用户主键
     *
     * @return createUserId - 创建用户主键
     */
    public Long getCreateUserId() {
        return createUserId;
    }

    /**
     * 设置创建用户主键
     *
     * @param createUserId 创建用户主键
     */
    public void setCreateUserId(Long createUserId) {
        this.createUserId = createUserId;
    }

    /**
     * 获取创建用户
     *
     * @return createUserName - 创建用户
     */
    public String getCreateUserName() {
        return createUserName;
    }

    /**
     * 设置创建用户
     *
     * @param createUserName 创建用户
     */
    public void setCreateUserName(String createUserName) {
        this.createUserName = createUserName;
    }

    /**
     * 获取修改时间
     *
     * @return modifyTime - 修改时间
     */
    public Date getModifyTime() {
        return modifyTime;
    }

    /**
     * 设置修改时间
     *
     * @param modifyTime 修改时间
     */
    public void setModifyTime(Date modifyTime) {
        this.modifyTime = modifyTime;
    }

    /**
     * 获取修改用户主键
     *
     * @return modifyUserId - 修改用户主键
     */
    public Long getModifyUserId() {
        return modifyUserId;
    }

    /**
     * 设置修改用户主键
     *
     * @param modifyUserId 修改用户主键
     */
    public void setModifyUserId(Long modifyUserId) {
        this.modifyUserId = modifyUserId;
    }

    /**
     * 获取修改用户
     *
     * @return modifyUserName - 修改用户
     */
    public String getModifyUserName() {
        return modifyUserName;
    }

    /**
     * 设置修改用户
     *
     * @param modifyUserName 修改用户
     */
    public void setModifyUserName(String modifyUserName) {
        this.modifyUserName = modifyUserName;
    }

    /**
     * 获取QQ登录接入OPENID
     *
     * @return qq_openid - QQ登录接入OPENID
     */
    public String getQq_openid() {
        return qq_openid;
    }

    /**
     * 设置QQ登录接入OPENID
     *
     * @param qq_openid QQ登录接入OPENID
     */
    public void setQq_openid(String qq_openid) {
        this.qq_openid = qq_openid;
    }

    /**
     * 获取微信登录接入OPENID
     *
     * @return weixin_openid - 微信登录接入OPENID
     */
    public String getWeixin_openid() {
        return weixin_openid;
    }

    /**
     * 设置微信登录接入OPENID
     *
     * @param weixin_openid 微信登录接入OPENID
     */
    public void setWeixin_openid(String weixin_openid) {
        this.weixin_openid = weixin_openid;
    }

    /**
     * 获取微博登录接入OPENID
     *
     * @return weibo_openid - 微博登录接入OPENID
     */
    public String getWeibo_openid() {
        return weibo_openid;
    }

    /**
     * 设置微博登录接入OPENID
     *
     * @param weibo_openid 微博登录接入OPENID
     */
    public void setWeibo_openid(String weibo_openid) {
        this.weibo_openid = weibo_openid;
    }
}